package br.com.EscolaDinamica.DAO;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaQuery;

import br.com.EscolaDinamica.UTIL.JPAUtil;

public class DAO<T> {
	private final Class<T> classe; // T vai ter uma classe mais nao sabe qual 
	
    public DAO(Class <T>classe){
    	this.classe = classe; // criando new objeto
    }
    
   public void salvarEntidade(T t){ // cria variavel t que sera us
	 
	  EntityManager em = new JPAUtil().getEntityManager();
	  
	  em.getTransaction().begin();//inicia transacao inicia o banco de 
	 
	  em.persist(t);
	  
	  em.getTransaction().commit(); 
	  
	  em.close(); // fecha a transacao
  }

   public void  apagarEntidade(T t){ // t nome da variavel
	 
	   EntityManager em = new JPAUtil().getEntityManager();
	   
	   em.getTransaction().begin();
	   
	   em.remove(t);
	   
	   em.getTransaction().commit();
	   
	   em.close();
	
   }

   public void atualizarEntidade (T t){
	   EntityManager em =  new JPAUtil().getEntityManager();
	   em.getTransaction().begin();
	   
	   em.merge(t);
	   
	   em.getTransaction().commit();
	   em.close();
   }
	
   public List<T> ListaTodos(){
	   EntityManager em  =new JPAUtil().getEntityManager();
	   CriteriaQuery<T>  query = em.getCriteriaBuilder().createQuery(classe);
	   query.select(query.from(classe));
	   
	   List<T> lista =em.createQuery(query).getResultList();
	   
	   em.close();
	   return lista;
   }

   public T BuscaPorId(Long id){
	return new JPAUtil().getEntityManager().find(classe, id);
   }
   
  
   		
   }


